layui.define(function (exports) { 
  var $ = layui.jquery
    , layer = layui.layer
    , setter = layui.setter
    , commons = layui.commons
    , device = layui.device()//底层方法--获取设备信息
    , hint = layui.hint()//底层方法--向控制台打印一些异常信息，目前只返回了error方法：layui.hint().error('出错啦')

    //对外接口
    , ajaxs = function () { };

 
  //测试
  ajaxs.ceshi = function (elem) {
    console.log("==ajaxs.ceshi==");
    console.log(elem);
  };




  //清除 token，并跳转到登入页
  ajaxs.exit = function (callback) {
    //清空本地记录的 token
    layui.data(setter.tableName, {
      key: setter.request.tokenName
      , remove: true
    });
    //跳转到登入页
    //location.hash = '/user/login'; 
    callback && callback();
  };



  //Ajax请求
  ajaxs.post = function (options) {
    var that = this
      , request = setter.request
      , response = setter.response;
    options.data = options.data || {};
    options.headers = options.headers || {};
    
    
       //禁用“确定”按钮
       commons.Disable_button_false(true,options.buttonID);


    //判断login是否存在，如果不存在，login赋值为false 
    options.login = options.login != true ? false : true;

    // console.log("===options===");
    // console.log(options);

    if (options.login) {
      if (request.tokenName) {
        //自动给参数传入默认 token
        options.data[request.tokenName] = request.tokenName in options.data
          ? options.data[request.tokenName]
          : (layui.data(setter.tableName)[request.tokenName] || '');

        //自动给 Request Headers 传入 token
        options.headers[request.tokenName] = request.tokenName in options.headers
          ? options.headers[request.tokenName]
          : (layui.data(setter.tableName)[request.tokenName] || '');
      }
    }

    // delete options.success;
    // delete options.error;

    return $.ajax($.extend({
      type: 'get'
      , dataType: 'json'
      , success: function (res) {
        var statusCode = response.statusCode;
        console.log("===ajax-post===");
        // console.log("===[return]===");
        //debugger;

        //只有 response 的 code 一切正常才执行 
        if (res[response.statusName] == statusCode.ok) {
          //成功后需要执行的方法

          //如果是登录执行
          if (options.login) {
            //请求成功后，写入 access_token
            layui.data(setter.tableName, {
              key: setter.request.tokenName
              , value: res.data.access_token
            });
          }
          
        }

        //状态失效
        else if (res[response.statusName] == statusCode.logout) {

          //判断是否是登录,如果是清除本地 access_token，并强制跳转到登入页
          if (options.login) {
            console.log("登录失败清除access_token");
            ajaxs.exit();
          } 

        }
        //返回的状态码不是正确的时候执行
        else if (res[response.statusName] != statusCode.ok) { 

           //解禁“确定”按钮
           commons.Disable_button_false(false,options.buttonID);
        }

        //只要 http 状态码正常，无论 response 的 code 是否正常都执行 success
        typeof options.success_status === 'function' && options.success_status(res);
      }
      , error: function (e, code) {
        // console.log("[[[ajax-error]]]")
        // console.log(e)
        // console.log(code)
        layer.alert('你调用的接口异常：' + options.url, { title: "异常:", icon: 2,btnAlign: 'c' });
      }
    }, options
    )
    );
  };



  //对外接口
  exports('ajaxs', ajaxs);
});